package cn.doitedu.day04

import cn.doitedu.day01.utils.SparkUtil
import cn.doitedu.day03.beans.Student
import org.apache.spark.rdd.RDD

/**
 * @Date 22.3.31
 * @Created by HANGGE
 * @Description
 */
object C05_转换算子_MapPartitionsWithIndex {
  def main(args: Array[String]): Unit = {

    // 获取环境
    val sc = SparkUtil.getSc
    // 加载文件
    val rdd1 = sc.textFile("data/students.csv")

    // 2) 将每行数据切割 处理   封装在Student类中
    val res1: RDD[Student] = rdd1.map(line=>{
      val arr = line.split(",")
      //7,七娃,15,M,99,doit30
      Student(arr(0).toInt, arr(1), arr(2).toInt, arr(3), arr(4).toDouble, arr(5))
    })

    // 每个分区执行一次
    val res2: RDD[(Student, Int)] = res1.mapPartitionsWithIndex((p, iters) => {
      //将每个分区的元素和 分区号组装
      iters.map((_, p))
    })

    res2.foreach(println)
  }

}
